home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr26 / netprog.zip / NETPROG.TAR / net / sppserv.c < prev    next >
C/C++ Source or Header  |  1989-12-17  |  1KB  |  54 lines

  1. /*
  2.  * Example of server using SPP protocol.
  3.  */
  4.  
  5. #include    "xns.h"
  6.  
  7. main(argc, argv)
  8. int    argc;
  9. char    *argv[];
  10. {
  11.     int            sockfd, newsockfd, clilen;
  12.     struct sockaddr_ns    cli_addr, serv_addr;
  13.  
  14.     pname = argv[0];
  15.  
  16.     /*
  17.      * Open a SPP socket (an XNS stream socket).
  18.      */
  19.  
  20.     if ( (sockfd = socket(AF_NS, SOCK_STREAM, 0)) < 0)
  21.         err_dump("server: can't open stream socket");
  22.  
  23.     /*
  24.      * Bind our local address so that the client can send to us.
  25.      */
  26.  
  27.     bzero((char *) &serv_addr, sizeof(serv_addr));
  28.     serv_addr.sns_family      = AF_NS;
  29.     serv_addr.sns_addr.x_port = htons(SERV_SPP_PORT);
  30.  
  31.     if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
  32.         err_dump("server: can't bind local address");
  33.  
  34.     listen(sockfd, 5);
  35.  
  36.     for ( ; ; ) {
  37.         /*
  38.          * Wait for a connection from a client process,
  39.          * then process it without fork()'ing.
  40.          * This is an example of an iterative server.
  41.          */
  42.  
  43.         clilen = sizeof(cli_addr);
  44.         newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr,
  45.                                      &clilen);
  46.         if (newsockfd < 0)
  47.             err_dump("server: accept error");
  48.  
  49.         str_echo(newsockfd);    /* returns when connection is closed */
  50.  
  51.         close(newsockfd);
  52.     }
  53. }
  54.